home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_kdelibs.idb / usr / freeware / kde / include / ktoolbar.h.z / ktoolbar.h
Encoding:
C/C++ Source or Header  |  1999-01-26  |  22.6 KB  |  741 lines

  1. /* This file is part of the KDE libraries
  2.     Copyright (C) 1997, 1998 Stephan Kulow (coolo@kde.org)
  3.               (C) 1997, 1998 Sven Radej (sven@lisa.exp.univie.ac.at)
  4.               (C) 1997, 1998 Mark Donohoe (donohoe@kde.org)
  5.               (C) 1997, 1998 Matthias Ettrich (ettrich@kde.org)
  6.               
  7.     This library is free software; you can redistribute it and/or
  8.     modify it under the terms of the GNU Library General Public
  9.     License as published by the Free Software Foundation; either
  10.     version 2 of the License, or (at your option) any later version.
  11.  
  12.     This library is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.     Library General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU Library General Public License
  18.     along with this library; see the file COPYING.LIB.  If not, write to
  19.     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  20.     Boston, MA 02111-1307, USA.
  21.     */
  22.  
  23. // $Id: ktoolbar.h,v 1.36 1998/06/20 10:57:00 radej Exp $
  24. // $Log: ktoolbar.h,v $
  25. // Revision 1.36  1998/06/20 10:57:00  radej
  26. // sven: mispelled something...
  27. //
  28. // Revision 1.35  1998/06/19 13:09:31  radej
  29. // sven: Docs.
  30. //
  31. // Revision 1.34  1998/05/04 16:38:36  radej
  32. // Bugfixes for moving + opaque moving
  33. //
  34. // Revision 1.33  1998/04/28 09:17:49  radej
  35. // New moving and docking BINARY INCOMPATIBLE
  36. //
  37.  
  38. #ifndef _KTOOLBAR_H
  39. #define _KTOOLBAR_H
  40.  
  41. #include <qlist.h>
  42. #include <qframe.h>
  43. #include <qpixmap.h>
  44. #include <qpopmenu.h>
  45. #include <qbutton.h>
  46. #include <qfont.h>
  47. #include <qsize.h>
  48.  
  49. #ifdef HAVE_CONFIG_H
  50. #include <config.h>
  51. #endif
  52.  
  53. #include "kcombo.h"
  54. #include "klined.h"
  55.  
  56. class KToolBar;
  57. class KToolBoxManager;
  58.  
  59. #define Item QWidget
  60.  
  61. enum itemType {
  62.     ITEM_LINED = 0,
  63.     ITEM_BUTTON = 1,
  64.     ITEM_COMBO = 2,
  65.     ITEM_FRAME = 3,
  66.     ITEM_TOGGLE = 4,
  67.     ITEM_ANYWIDGET=5
  68. };
  69.  
  70. class KToolBarItem
  71. {
  72. public:
  73.   KToolBarItem (Item *_item, itemType _type, int _id,
  74.                 bool _myItem=true);
  75.   ~KToolBarItem ();
  76.     
  77.   void resize (int w, int h) { item->resize(w, h); };
  78.   void move(int x, int y) { item->move(x, y); };
  79.   void show () { item->show(); };
  80.   void hide () { item->hide(); };
  81.   void setEnabled (bool enable) { item->setEnabled(enable); };
  82.   bool isEnabled () { return item->isEnabled(); };
  83.   int ID() { return id; };
  84.   bool isRight () { return right; };
  85.   void alignRight  (bool flag) { right = flag; };
  86.   void autoSize (bool flag) { autoSized = flag; };
  87.   bool isAuto ()  { return autoSized; };
  88.   int width() { return item->width(); };
  89.   int height() { return item->height(); };
  90.   int x() { return item->x(); };
  91.   int y() { return item->y(); };
  92.   int winId () { return item->winId(); };
  93.   
  94.   Item *getItem() { return item; };
  95.   
  96. private:
  97.   int id;
  98.   bool right;
  99.   bool autoSized;
  100.   Item *item;
  101.   itemType type;
  102.   bool myItem;
  103. };
  104.  
  105. class KToolBarButton : public QButton
  106.  {
  107.    Q_OBJECT
  108.  
  109.  public:
  110.    KToolBarButton(const QPixmap& pixmap, int id, QWidget *parent,
  111.                   const char *name=0L, int item_size = 26, const char *txt=0);
  112.    KToolBarButton(QWidget *parent=0L, const char *name=0L);
  113.    ~KToolBarButton() {};
  114.    void setEnabled(bool enable);
  115.    void makeDisabledPixmap();
  116.    
  117.    void setPixmap( const QPixmap & );
  118.    void on(bool flag);
  119.    void toggle();
  120.    void beToggle(bool);
  121.    bool ImASeparator () {return sep;};
  122.    void youreSeparator () {sep = true;};
  123.  
  124.  public slots:
  125.    void modeChange();
  126.    
  127.  protected:
  128.    void paletteChange(const QPalette &);
  129.    void leaveEvent(QEvent *e);
  130.    void enterEvent(QEvent *e);
  131.    void drawButton(QPainter *p);
  132.    
  133.  private:
  134.    bool sep;
  135.    QPixmap enabledPixmap;
  136.    QPixmap disabledPixmap;
  137.    int icontext;
  138.    int highlight;
  139.    bool raised;
  140.    int id;
  141.    int _size;
  142.    KToolBar *parentWidget;
  143.    QString btext;
  144.    QFont buttonFont;
  145.    
  146.    protected slots:
  147.      void ButtonClicked();
  148.      void ButtonPressed();
  149.      void ButtonReleased();
  150.      void ButtonToggled();
  151.  
  152.  signals:
  153.      void clicked(int);
  154.      void pressed(int);
  155.      void released(int);
  156.      void toggled(int);
  157.  };
  158.  
  159. /**
  160.  * KToolBar is a self resizing, floatable widget.
  161.  * It is usually managed from KTopLevelWidget, but can be
  162.  * used even if you don't use KTopLevelWidget. If you want
  163.  * to handle this without KTopLevelWidget, see updateRects .<BR>
  164.  * KToolBar can contain buttons Line inputs Combo Boxes, frames, and
  165.  * custom widgets.
  166.  * Combos, Frames and Lineds, and Widgets can be  autosized to full width.
  167.  * Any Item can be right aligned, and buttons can be toggle buttons. Item
  168.  * height,  type of buttons (icon or icon+text), and option for highlighting
  169.  * is adjustable on constructor invocation by reading global config file.
  170.  * Toolbar will reread config-file when it recieves signal
  171.  * Kapplication:appearanceChanged.
  172.  * Toolbar can float, be dragged from and docked back to parent window.
  173.  * It autoresizes itself. This may lead to
  174.  * some flickering, but there is no way to solve it (as far as I
  175.  * know). <BR>
  176.  * If you want to bind popups to buttons, see setButton(). <BR>
  177.  * You normaly use toolbar from subclassed KTopLevelWidget. When
  178.  * you create toolbar object, insert items that you want to be in it.
  179.  * Items can be inserted or removed ( removeItem() ) later, when toolbar
  180.  * is displayed. It will update itself.
  181.  * Then set their propperties ( alignItemRight , setItemAutoSized ,
  182.  * setToggle ...) After that set the toolbar itself, enable ,setBarPos ...).
  183.  * Then simply do addToolbar (toolbar),
  184.  * and you're on. See how it's done in kwindowtest.
  185.  * @short KDE Toolbar widget
  186.  * @author Stephan Kulow <coolo@kde.org> Maintained by Sven Radej <sven@lisa.exp.univie.ac.at>
  187.  */
  188.  class KToolBar : public QFrame
  189.   {
  190.  
  191.   Q_OBJECT
  192.  
  193.   friend class KToolBarButton;
  194. public:
  195.   enum BarStatus{Toggle, Show, Hide};
  196.   enum BarPosition{Top, Left, Bottom, Right, Floating};
  197.  
  198.   /**
  199.    * Constructor.
  200.    * Toolbar will read global-config file for item Size higlight
  201.    * option and button type. However, you can pass desired height.
  202.    * This is not recomended.
  203.    */
  204.   KToolBar(QWidget *parent=0L, const char *name=0L, int _item_size = -1);
  205.  
  206.   /**
  207.    * Destructor. If toolbar is floating it will cleanup itself.
  208.    * You MUST delete toolbar before exiting.
  209.    */
  210.   virtual ~KToolBar();
  211.  
  212.   /**
  213.    * Inserts KButton with pixmap. You should connect to one or more signals in
  214.    * KToolBar: @ref #clicked , @ref #pressed , @ref #released , and
  215.    * if toolbar is toggle button (@ref #setToggle ) @ref #toggled . Those
  216.    * signals have id of a button that caused the signal.
  217.    * If you want to bound an popup to button, see  @ref #setButton
  218.    * @param index the position of the button. (-1 = at end).
  219.    * @return Returns item index
  220.    */
  221.   int insertButton(const QPixmap& pixmap, int ID, bool enabled = true,
  222.                    const char *ToolTipText = 0L, int index=-1 );
  223.   /**
  224.    * This is the same as above, but with specified signals and
  225.    * slots to which this button will be connected. Button emits
  226.    * signals pressed, clicked and released, and
  227.    * if toolbar is toggle button ( @ref #setToggle ) @ref #toggled .
  228.    * You can add more signals with @ref #addConnection .
  229.    * If you want to bound an popup to button  @ref #setButton
  230.    * @return Returns item index
  231.    */
  232.   int insertButton(const QPixmap& pixmap, int ID, const char *signal,
  233.                    const QObject *receiver, const char *slot,
  234.                    bool enabled = true,
  235.                    const char *tooltiptext = 0L, int index=-1 );
  236.   /**
  237.    * Inserts a KLined. You have to specify signals and slots to
  238.    * which KLined will be connected. KLined has all slots QLineEdit
  239.    * has, plus signals @ref KLined::completion and @ref KLined::rotation
  240.    * KLined can be set to autoresize itself to full free width
  241.    * in toolbar, that is to last right aligned item. For that,
  242.    * toolbar must be set to full width.
  243.    * @see #setFullWidth
  244.    * @see #setItemAutoSized
  245.    * @see KLined
  246.    * @return Returns item index
  247.    */
  248.   int insertLined (const char *text, int ID,
  249.                    const char *signal,
  250.                    const QObject *receiver, const char *slot,
  251.                    bool enabled = true,
  252.                    const char *toolTipText = 0L, int size = 70, int index =-1);
  253.  
  254.   /**
  255.    * Inserts KComboBox with list. Can be writable, but cannot contain pixmaps. By
  256.    * default inserting policy is AtBottom, i.e. typed items are placed at the bottom
  257.    * of the list. Can be autosized
  258.    * KCombo is almost the same thing as QComboBox.
  259.    * @see #setFullWidth
  260.    * @see #setItemAutoSized
  261.    * @see KCombo
  262.    * @return Returns item index
  263.    */
  264.   int insertCombo (QStrList *list, int id, bool writable,
  265.                    const char *signal, QObject *recevier,
  266.                    const char *slot, bool enabled=true,
  267.                    const char *tooltiptext=0L,
  268.                    int size=70, int index=-1,
  269.                    KCombo::Policy policy = KCombo::AtBottom);
  270.  
  271.   /**
  272.    * Inserts KCombo with text. The rest is the same as above.
  273.    * @see #setItemAutoSized
  274.    * @see KCombo
  275.    * @return Returns item index
  276.    */
  277.   int insertCombo (const char *text, int id, bool writable,
  278.                    const char *signal, QObject *recevier,
  279.                    const char *slot, bool enabled=true,
  280.                    const char *tooltiptext=0L,
  281.                    int size=70, int index=-1,
  282.                    KCombo::Policy policy = KCombo::AtBottom);
  283.   /**
  284.    * Insert separator
  285.    */
  286.   int insertSeparator(int index=-1);
  287.  
  288.   /**
  289.    * This function is deprecated and will be removed. Use @ref #insertWidget
  290.    * to insert anything.
  291.    * Inserts frame with specified width. You can get
  292.    * pointer to this frame with @ref #getFrame
  293.    * Frame can be autosized to full width.
  294.    * @see #setItemAutoSized
  295.    * @return Returns item index
  296.    */
  297.   int insertFrame(int id, int width, int index =-1);
  298.  
  299.   /**
  300.    * Insert a user defined widget. Widget must have a QWidget for
  301.    * base class.
  302.    * Widget can be autosized to full width. If you forget about it, you
  303.    * can get pointer to this widget with @ref #getWidget .
  304.    * @see #setItemAutoSized
  305.    * @return Returns item index
  306.    */
  307.   int insertWidget(int id, int width, QWidget *_widget, int index=-1);
  308.  
  309.   /**
  310.    * This adds connection to items. Therefore it is important that you
  311.    * know id of particular item. Nothing happens if you miss id.
  312.    */
  313.   void addConnection (int id, const char *signal,
  314.                       const QObject *receiver, const char *slot);
  315.   /**
  316.    * Enables/disables item.
  317.    */
  318.   void setItemEnabled( int id, bool enabled );
  319.  
  320.   /**
  321.    * Sets button pixmap.
  322.    * Can be used while button is visible.
  323.    */
  324.   void setButtonPixmap( int id, const QPixmap& _pixmap );
  325.  
  326.   /**
  327.    * Makes button a toggle button if flag is true
  328.    */
  329.   void setToggle (int id, bool flag = true);
  330.  
  331.   /**
  332.    * If button is toggle (@ref #setToggle must be called first)
  333.    * button state will be toggled. This will also cause toolbar to
  334.    * emit signal @ref #toggled wit parameter id. You must connect to
  335.    * this signal, or use @ref #addConnection to connect directly to
  336.    * button-signal toggled.
  337.    */
  338.   void toggleButton (int id);
  339.  
  340.   /**
  341.    * If button is toggle (@ref #setToggle must be called first)
  342.    * this will set him to state flag. This will also emit signal
  343.    * #ref toggled . <BR>
  344.    * If button is not toggle, calling with flag = false will
  345.    * unhighlight this button.
  346.    * You will want to do this if you want buttons to have popups.
  347.    * This is what you do: <BR>
  348.    * - Connect to signal @ref #pressed <BR>
  349.    * - In slot, before you activate popup, call setButton(id, false); <BR>
  350.    * - activate your popup <BR>
  351.    * Example:
  352.    * <pre>
  353.    * toolbar->insertButton(pixmap, 1, SIGNAL(pressed()),
  354.    *                class, SLOT(slotPopup()), true, "Press this to popup");
  355.    * ...
  356.    * class::slotPopup()
  357.    * {
  358.    *  toolbar->setButton(1, false)  // this turns the button off
  359.    *  myPopupMenu->show();
  360.    * }
  361.    * </pre>
  362.    * @see #setToggle
  363.    */
  364.   void setButton (int id, bool flag);
  365.  
  366.   /**
  367.    * Returns true if button is on, false if button is off.
  368.    * If button is not a toggle button returns false
  369.    * @see #setToggle
  370.    */
  371.   bool isButtonOn (int id);
  372.   
  373.   /**
  374.    * Sets text in Lined.
  375.    * Cursor is set at end of text.
  376.    */
  377.   void setLinedText (int id, const char *text);
  378.  
  379.   /**
  380.    * Returns Lined text.
  381.    * If you want to store this text, you have to deep-copy it somwhere
  382.    */
  383.   const char *getLinedText (int id);
  384.  
  385.   /**
  386.    * Inserts text in combo id with at position index.
  387.    */
  388.   void insertComboItem (int id, const char *text, int index);
  389.  
  390.   /**
  391.    * Inserts list in combo id at position index
  392.    */
  393.   void insertComboList (int id, QStrList *list, int index);
  394.  
  395.   /**
  396.    * Removes item index from Combo id.
  397.    */
  398.   void removeComboItem (int id, int index);
  399.  
  400.   /**
  401.    * Sets item index to be current item in Combo id.
  402.    */
  403.   void setCurrentComboItem (int id, int index);
  404.  
  405.   /**
  406.    * Changes item index in Combo id to text.
  407.    * index = -1 means current item (one displayed in the button).
  408.    */
  409.   void changeComboItem  (int id, const char *text, int index=-1);
  410.  
  411.   /**
  412.    * Clears combo id.
  413.    * Does not delete it or hide it.
  414.    */
  415.   void clearCombo (int id);
  416.  
  417.   /**
  418.    * Returns text of item index from Combo id.
  419.    * index = -1 means current item
  420.    */
  421.  
  422.   const char *getComboItem (int id, int index=-1);
  423.  
  424.   /**
  425.    * This returns pointer to Combo. Example:
  426.    * <pre>
  427.    * KCombo *combo = toolbar->getCombo(combo_id);
  428.    * </pre>
  429.    * That way you can get access to other public methods
  430.    * that @ref KCombo provides. @ref KCombo is KDE enhancement
  431.    * of @ref QComboBox .
  432.    */
  433.   KCombo * getCombo(int id);
  434.   
  435.   /**
  436.    * This returns pointer to KToolBarLined. Example:
  437.    * <pre>
  438.    * KLined * lined = toolbar->getKTollBarLined(lined_id);
  439.    * </pre>
  440.    * That way you can get access to other public methods
  441.    * that @ref KLined provides. @ref KLined is the same thing
  442.    * as @ref QLineEdit plus completion signals.
  443.    */  
  444.   KLined * getLined (int id);
  445.  
  446.   /**
  447.    * This returns a pointer to KToolBarButton. Example:
  448.    * <pre>
  449.    * KToolBarButton * button = toolbar->getButton(button_id);
  450.    * </pre>
  451.    * That way you can get access to other public methods
  452.    * that @ref KToolBarButton provides. Using of this method is not
  453.    * recomended.
  454.    */  
  455.   KToolBarButton * getButton (int id);
  456.  
  457.   /**
  458.    * Alignes item right.
  459.    * This works only if toolbar is set to full width.
  460.    * @see #setFullWidth
  461.    */
  462.   void alignItemRight (int id, bool right = true);
  463.  
  464.   /**
  465.    * This function is deprecated and might be removed. Use @ref #insertWidget
  466.    * and @ref #getWidget instead.<br>
  467.    * Returns pointer to inserted frame. Wrong ids are not tested.
  468.    * Example:
  469.    * <pre>
  470.    * QFrame *frame = toolbar->getframe (frameid);
  471.    * </pre>
  472.    * You can do with this frame whatever you want,
  473.    * except change its height (hardcoded). If you change its width
  474.    * you will probbably have to call toolbar->@ref #updateRects (true)
  475.    * @see QFrame
  476.    * @see #updateRects
  477.    */
  478.   QFrame * getFrame (int id);
  479.  
  480.   /**
  481.    * Returns pointer to inserted widget. Wrong ids are not tested.
  482.    * You can do with this whatever you want,
  483.    * except change its height (hardcoded). If you change its width
  484.    * you will probbably have to call toolbar->@ref #updateRects (true)
  485.    * @see QWidget
  486.    * @see #updateRects
  487.    */
  488.   QWidget *getWidget (int id);
  489.   
  490.   /**
  491.    * Sets item autosized. This works only if toolbar is set to full width.
  492.    * ONLY ONE item can be autosized, and it has to be
  493.    * the last left-aligned item. Items that come after this must be right
  494.    * aligned. Items that can be right aligned are Lineds, Frames, Widgets and
  495.    * Combos. Auto sized item will resize itself whenever toolbar geometry
  496.    * changes, to last right-aligned item (or till end of toolbar if there
  497.    * are no right aligned items
  498.    * @see #setFullWidth
  499.    * @see #alignItemRight
  500.    */
  501.   void setItemAutoSized (int id, bool yes = true);
  502.  
  503.   /**
  504.    * Removes item id.
  505.    * Item is deleted. Toolbar is redrawn after it.
  506.    */
  507.   void removeItem (int id);
  508.  
  509.   /**
  510.    * Hides item.
  511.    */
  512.   void hideItem (int id);
  513.  
  514.   /**
  515.    * shows item.
  516.    */
  517.   void showItem (int id);
  518.   
  519.   /**
  520.    * Sets toolbar to full parent width (or to value set by setMaxWidth).
  521.    * You have to call this function if you want to have right aligned items or
  522.    * autosized item. <BR>
  523.    * The toolbar is set to full width by default.
  524.    * @see #alignItemRight
  525.    * @see #setItemAutoSized
  526.    */
  527.   void setFullWidth(bool flag = true);    // Top and Bottom pos only
  528.  
  529.   /**
  530.    * Enables or disables moving of toolbar.
  531.    */
  532.   void enableMoving(bool flag = true);
  533.  
  534.   /**
  535.    * Sets position of toolbar
  536.    * @see #BarPosition
  537.    */
  538.   void setBarPos (BarPosition bpos);
  539.  
  540.   /**
  541.    * Returns position of toolbar
  542.    */
  543.   BarPosition barPos() {return position;};
  544.  
  545.   /**
  546.    * This shows, hides, or toggles toolbar. If toolbar floats,
  547.    * hiding means minimizing. Warning: kwm will not show minimized toolbar
  548.    * on taskbar. Therefore hiding means hiding.
  549.    * @see #BarStatus
  550.    */
  551.   bool enable(BarStatus stat);
  552.  
  553.   /**
  554.    * Sets maximal height of vertical (Right or Left) toolbar. You normaly
  555.    * do not have to call it, since it's called from
  556.    * @ref KTopLevelWidget#updateRects
  557.    * If you reimplement @ref KTopLevelWidget#resizeEvent or
  558.    * KTopLevelWidget#updateRects,
  559.    * be sure to call this function with maximal height toolbar can have.
  560.    * @see #updateRects
  561.    */
  562.   void setMaxHeight (int h);  // Set max height for vertical toolbars
  563.  
  564.   /**
  565.    * Sets maximal width of horizontal (top or bottom) toolbar. This works
  566.    * only for horizontal toolbars (at Top or Bottom), and has no effect
  567.    * otherwise. Has no effect when toolbar is floating.
  568.    */
  569.   void setMaxWidth (int dw);
  570.  
  571.   /**
  572.    * Sets title for toolbar when it floats. Titles are however not (yet)
  573.    * visible. You can't change toolbar's title while it's floating.
  574.    */
  575.   void setTitle (const char *_title) {title = _title;};
  576.  
  577.   /**
  578.    * Enables or disables floating.
  579.    * Floating is enabled by default.
  580.    * This only disables menu entry Floating in popup menu, so
  581.    * toolbar can still be moved by @ref #setBarPos or by dragging.
  582.    * This function is obsolete and do not use it. If you want to make
  583.    * toolbar static use @ref enableMoving
  584.    */
  585.   void enableFloating (bool arrrrrrgh);
  586.  
  587.   /**
  588.    * Redraw toolbar and resize it if resize is true.
  589.    * You normaly don't have to call it, since it's called from
  590.    * @ref KTopLevelWidget#updateRects or from resizeEvent. You can call it
  591.    * if you manualy change width of inserted frame, or if you wish to force
  592.    * toolbar to recalculate itself. <BR>
  593.    * You don't want to fiddle with this.
  594.    * @ref KtopLevelWidget works closely with toolbar. If you want to
  595.    * subclass KTopLevelWidget to change its resize policy, hear this: <BR>
  596.    * <BR>
  597.    * resizeEvent() in KTopLevelWidget just calls updateRects, which handles
  598.    * children sizes. Call updateRects when you're done with your things. <BR>
  599.    * <BR>
  600.    * If you want to handle everything yourself:<BR>
  601.    * <BR>
  602.    * KToolBar manages itself by calling toolbar->@ref #updateRects (true).
  603.    * It will autosize itself, but won't move itself.
  604.    * You have to do the moving. <BR>
  605.    * First setup & move anything that is above toolbars (menus...). Then
  606.    * setup statusbars and other horizontal things on bottom. Then loop through
  607.    * all HORIZONTAL toolbars, call their updateRects(true), _then_ take their
  608.    * size, an move them (note that they size themselves according to parent
  609.    * width()). After  you have looped through HORIZONTAL toolbars, calculate
  610.    * the maximum height that vertical toolbars may have (this is your free
  611.    * area height). Then loop through vertical toolbars,
  612.    * @ref #setMaxHeight (calculated_max_height) on them,
  613.    * call their updateRects(true), and _then_ move them to their locations.
  614.    * @see KtopLevelWidget#updateRects
  615.    */
  616.   void updateRects(bool resize = false);
  617.  
  618.   /**
  619.      * Returns minimal width for top-level window, so that toolbar
  620.      * has only one row.
  621.      */
  622.   QSize sizeHint();
  623.     
  624.   // OLD  INTERFACE
  625.  
  626. signals:
  627.     /**
  628.      * Emits when button id is clicked.
  629.      */
  630.     void clicked(int id);
  631.  
  632.     /**
  633.      * Emits when button id is pressed. See @ref setButton for binding
  634.      * popups to buttons.
  635.      */
  636.     void pressed(int);
  637.  
  638.     /**
  639.      * Emits when button id is released.
  640.      */
  641.     void released(int);
  642.  
  643.     /**
  644.      * Emits when toggle button changes state
  645.      * Emits also if you change state
  646.      * with @ref #setButton or @ref #toggleButton
  647.      * If you make a button normal again, with
  648.      * @ref #setToggle (false), this signal won't
  649.      * be emited.
  650.      */
  651.     void toggled(int);
  652.     
  653.     /**
  654.      * Emits when toolbar changes its position, or when
  655.      * item is removed from toolbar. This is normaly connected to
  656.      * @ref KTopLevelWidget::updateRects.
  657.      * If you subclass @ref KTopLevelWidget and reimplement
  658.      * @ref KTopLevelWidget::resizeEvent or
  659.      * @ref KTopLevelWidget::updateRects, be sure to connect to
  660.      * this signal. You can connect this signal to slot that
  661.      * doesn't take parameter.
  662.      * @see #updateRects
  663.      */
  664.     void moved( BarPosition );
  665.  
  666.     /**
  667.      * Internal. This signal is emited when toolbar detects changing of
  668.      * following parameters:
  669.      * highlighting, button-size, button-mode. This signal is
  670.      * internal, aimed to buttons.
  671.      */
  672.     void modechange ();
  673.   
  674. private:
  675.     
  676.   QList<KToolBarItem> items;
  677.  
  678.   const char *title;
  679.   bool fullWidth;
  680.   BarPosition position;
  681.   bool moving;
  682.   QWidget *Parent;
  683.   int toolbarWidth;
  684.   int toolbarHeight;
  685.  
  686.   int oldX;
  687.   int oldY;
  688.   int oldWFlags;
  689.   
  690.   int max_width;
  691.   int max_height;
  692.   
  693.   BarPosition lastPosition; // Where was I last time I was?
  694.   BarPosition movePos;      // Where was I moved to?
  695.   bool mouseEntered;  // Did the mouse touch the cheese?
  696.   bool horizontal;    // Do I stand tall?
  697.   bool localResize;   // Am I trying to understand recursion?
  698.   bool wasFullWidth;  // Was I loong when I was?
  699.   bool haveAutoSized; // Do I have a problem?
  700.  
  701.   KToolBoxManager *mgr;
  702.   
  703. protected:
  704.   QPopupMenu *context;
  705.  
  706.   void drawContents ( QPainter *);
  707.   void resizeEvent(QResizeEvent*);
  708.   void paintEvent(QPaintEvent*);
  709.   void closeEvent (QCloseEvent *);
  710.   void mousePressEvent ( QMouseEvent *);
  711.   void init();
  712.   void layoutVertical ();
  713.   void layoutHorizontal ();
  714.   void leaveEvent (QEvent *e);
  715.   
  716.   
  717. protected slots:
  718.   void ButtonClicked(int);
  719.   void ButtonPressed(int);
  720.   void ButtonReleased(int);
  721.   void ButtonToggled(int);
  722.   void ContextCallback(int);
  723.   void slotReadConfig ();
  724.   void slotHotSpot (int i);
  725.   
  726. protected:
  727.   void mouseMoveEvent(QMouseEvent*);
  728.   void mouseReleaseEvent ( QMouseEvent *);
  729.  
  730. private:
  731.    QPoint pointerOffset;
  732.    QPoint parentOffset;
  733.    int item_size;  // normal: 26
  734.    int icon_text;  // 1 = icon+text, 0 icon+tooltip
  735.    bool highlight; // yes/no
  736.    QSize szh;      // Size for sizeHint
  737.    bool fixed_size; // do not change the toolbar size
  738.    bool transparent; // type of moving
  739. };
  740. #endif
  741.